package com.example.crowdfunding.utils;
/*
 * @Author: hanj
 * @Email: hanj.cn@outlook.com
 * @Date: 2021/12/4 15:38
 */

import com.example.crowdfunding.constant.CrowdConstant;

import javax.servlet.http.HttpServletRequest;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 判断请求类型的工具类
 */
public class CrowdUtils {

    /**
     * 判断请求的类型, 判断依据：请求消息头不一样
     *
     * @param request 请求
     * @return true or false
     */
    public static Boolean isAjaxRequest(HttpServletRequest request) {

        // 1.得到请求标头
        String header_Accept = request.getHeader("Accept");
        String header_X_Requested_With = request.getHeader("X-Requested-With");

        // 2.判断并返回
        return (header_Accept != null && header_Accept.contains("application/json"))
                ||
                (header_X_Requested_With != null && header_X_Requested_With.equals("XMLHttpRequest"));
    }

    /**
     * 用md5加密字符串的工具方法
     *
     * @param source 需要被处理的字符串
     * @return 处理后的字符串
     */
    public static String md5(String source) {

        // 1.判断source是否有效
        if (source == null || source.length() == 0) {

            //2.无效，抛出异常
            throw new RuntimeException(CrowdConstant.MESSAGE_STRING_INVALIDATE);
        }

        String algotithn = "md5";
        try {

            // 3.有效，获取messageDigital对象
            MessageDigest messageDigest = MessageDigest.getInstance(algotithn);

            // 4.获取需要被加密的字节数组
            byte[] inputBytes = source.getBytes();

            // 5.执行加密
            byte[] outputBytes = messageDigest.digest(inputBytes);

            // 6.创建BigInteger对象
            int signum = 1;
            BigInteger bigInteger = new BigInteger(signum, outputBytes);

            // 7.按照16进制将bigInteger的值转为字符串
            int radix = 16;
            String encoded = bigInteger.toString(radix).toUpperCase();

            // 8.返回值
            return encoded;

        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * 自动以yyyy-MM-dd HH:mm:ss格式生成当前时间并以字符串形式返回
     *
     * @return 格式化好的时间
     */
    public static String dateUtil() {

        // 生成时间
        Date date = new Date();
        // 创建一个简单日期格式化转换器
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 转换格式
        String createTime = dateFormat.format(date);
        return createTime;
    }

    public static String toJson() {

        return "";
    }

}
